/************************************************************************************
* Filename:				CObjStateMachine.h   
* Date Created:         04/29/2011     
* Mod. Date:            04/29/2011             
* Mod. Initials:		JW
* Author:				John Wileczek
* Purpose:				Define the CObjStateMachine class. This class will act as
*						the lightweight state machine for the objects in the game
*						that require it.
*************************************************************************************/
#ifndef COBJSTATEMACHINE_H_
#define COBJSTATEMACHINE_H_

//Includes


//Forward Declarations
class CAbstractState;

class CObjStateMachine
{
private:
	CAbstractState*			m_pCurrState;
	CAbstractState*			m_pPrevState;
public:
/*********************************************************************************
 * CObjStateMachine():		Constructor will call Initialize()   
 * 			      			      			      
 * Ins:					nObjType
 *
 * Outs:				void
 *
 * Returns:				void
 *
 * Mod. Date:		    04/30/2011
 * Mod. Initials:	    JW
 ********************************************************************************/
	CObjStateMachine(int nObjType);

/*********************************************************************************
 * ~CObjStateMachine():		Destructor will call Shutdown()  
 * 			      			      			      
 * Ins:					void 
 *      		     
 * Outs:				void
 *
 * Returns:				void
 *
 * Mod. Date:		    04/30/2011
 * Mod. Initials:	    JW
 ********************************************************************************/
	~CObjStateMachine();

/*********************************************************************************
 * Initialize():		Initialize will set up the object state machine and   
 * 			      		put the object into it's correct start state.
 *
 * Ins:					nObjType 
 *
 * Outs:				void
 *
 * Returns:				void
 *
 * Mod. Date:		    04/30/2011
 * Mod. Initials:	    JW
 ********************************************************************************/
	void Initialize(int nObjType);

/*********************************************************************************
 * Shutdown():			Shutdown will clean up any necessary memory in the object   
 * 			      		state machine.
 *
 * Ins:					void
 *
 * Outs:				void
 *
 * Returns:				void
 *
 * Mod. Date:		    04/30/2011
 * Mod. Initials:	    JW
 ********************************************************************************/
	void Shutdown();

/*********************************************************************************
 * ChangeState():		ChangeState will take in the new state for the object and  
 * 			      		change the current state to the new state correctly.
 *
 * Ins:					pNewState
 *
 * Outs:				void
 *
 * Returns:				void
 *
 * Mod. Date:		    04/30/2011
 * Mod. Initials:	    JW
 ********************************************************************************/
	void ChangeState(CAbstractState* pNewState);

};
#endif